//989. 数组形式的整数加法
//思路：数组与数字都从最后边开始相加，当相加的数字>=10，加到数字的上一位
//最后逆置数组

#include <stdlib.h>
void reverse(int* arr, int n)
{
    int* begin = arr, * end = arr+n-1;
    while (begin < end)
    {
        int tmp = *begin;
        *begin = *end;
        *end = tmp;
    
        begin++;
        end--;
    }
}
int* addToArrayForm(int* num, int numSize, int k, int* returnSize){
    int* ret = (int*)malloc(sizeof(int)*fmax(10, numSize+1));
    if(NULL == ret)
    {
        perror("malloc fail:");
        return NULL;
    }
    
    *returnSize = 0;// 这里的设计比较巧妙
    for(int i = numSize-1; i >= 0; i--)
    {
        int sum = num[i] + k % 10;
        k /= 10;
        if(sum >= 10)
        {
            k++;// 当两个对应位置数字相加>=10时，进位给前一位
            sum -= 10;
        }
        ret[(*returnSize)++] = sum;
    }
    for(; k > 0; k /= 10)// 当数组走完，数字没有走完
    {
        ret[(*returnSize)++] = k % 10;
    }
    reverse(ret, *returnSize);

    return ret;
}